package org.setamv.springcloud.feign.contract;

import feign.Contract.BaseContract;
import feign.MethodMetadata;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class CustomizedContract extends BaseContract {

    @Override
    protected void processAnnotationOnClass(MethodMetadata methodMetadata, Class<?> aClass) {

    }

    /**
     * 下面通过解析设置在注解{@linkplain CustomizedHttpRequest}上的url和method，拼接完整的请求访问地址信息
     * @param methodMetadata
     * @param annotation
     * @param method
     */
    @Override
    protected void processAnnotationOnMethod(MethodMetadata methodMetadata, Annotation annotation, Method method) {
        if (CustomizedHttpRequest.class.isInstance(annotation)) {
            // 通过注解获取设置的 url 和 method。 参见 CustomizedHttpRequest 注解定义
            CustomizedHttpRequest request = method.getAnnotation(CustomizedHttpRequest.class);
            String url = request.url();
            String httpMethod = request.method();
            methodMetadata.template().method(httpMethod);

            // 将注解配置的url添加到url后面（原来的url只是在Feign.builder().target(clazz, url)中定义的url，一般只包含主机部分）
            // 所以这里只需要将注解上设置的路径加到主机名后面
            methodMetadata.template().append(url);
        }
    }

    @Override
    protected boolean processAnnotationsOnParameter(MethodMetadata methodMetadata, Annotation[] annotations, int i) {
        return false;
    }
}
